package com.augurit.gzcgwsp.excelimportexport.service.impl;

import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.dozer.DozerBeanMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.augurit.gzcgwsp.excelimportexport.dao.YwRqQyjyxkRypbqkDao;
import com.augurit.gzcgwsp.excelimportexport.entity.YwRqQyjyxkPzrqgyzdjb;
import com.augurit.gzcgwsp.excelimportexport.entity.YwRqQyjyxkRypbqk;
import com.augurit.gzcgwsp.excelimportexport.service.IYwRqQyjyxkRypbqkService;
import com.augurit.gzcgwsp.rqqyjyxk.entity.YwRqQyjyxkFinalPzrqgyzdjb;
import com.augurit.gzcgwsp.rqqyjyxk.entity.YwRqQyjyxkFinalRypbqk;
import com.augurit.gzcgwsp.rqqyjyxk.service.IYwRqQyjyxkFinalRypbqkService;

/**
 * 广州市燃气经营许可证许可审批------七、1 人员配备情况
 * @author xgw
 *
 */
@Service
@Transactional
public class YwRqQyjyxkRypbqkServiceImpl implements IYwRqQyjyxkRypbqkService {
	@Autowired
	private YwRqQyjyxkRypbqkDao ywRqQyjyxkRypbqkDao;
	@Autowired
	private IYwRqQyjyxkFinalRypbqkService rypbqkService;
	/**
	 * 保存 七、1 人员配备情况
	 * @param ywRqQyjyxkRypbqk
	 */
	public void save(YwRqQyjyxkRypbqk ywRqQyjyxkRypbqk) {
		ywRqQyjyxkRypbqkDao.save(ywRqQyjyxkRypbqk);
	}
	
	/**
	 * 解析 七、1 人员配备情况
	 * @param hssfsheet
	 * @param acceptNo
	 * @param qyid
	 * @return
	 */
	public YwRqQyjyxkRypbqk parseRypbqk(HSSFSheet hssfsheet, String acceptNo,Long qyid, String username,Date dateFlag,String flag) {
		String xm = null;//姓名
		String nl = null;//年龄
		String gw = null;//岗位
		String gwjnzsjbh = null;//岗位技能证书及编号
		String fzjg = null;//发证机关
		
//		String hql = "from YwRqQyjyxkRypbqk t where t.qyid = "+qyid+"";
//			List<YwRqQyjyxkRypbqk> list=ywRqQyjyxkRypbqkDao.find(hql);
//			for(int i=0;i<list.size();i++)
//			{
//				ywRqQyjyxkRypbqkDao.delete(list.get(i));
//			}
		
		try {			
			HSSFRow hssfrow = hssfsheet.getRow(0);// 第一行
			// 遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数
			for (int i = 10; i < hssfsheet.getPhysicalNumberOfRows(); i++) {
				hssfrow = hssfsheet.getRow(i);
				// 判断是否还存在需要导入的数据
				if (hssfrow == null) {
					// System.out.println("这里已没有数据，在第" + i + "列,第" + j + "行");
					break;
				}				
				if (hssfrow.getCell((short) 1) == null) {
					xm = "";
				} else if (hssfrow.getCell((short) 1).getCellType() == 0) {
					xm = new Double(hssfrow.getCell((short) 1).getNumericCellValue()).toString();
				} else {// 如果EXCEL表格中的数据类型为字符串型
					xm = hssfrow.getCell((short) 1).getStringCellValue().trim();
				}
				if (hssfrow.getCell((short) 2) == null) {
				nl = "";
				} else if (hssfrow.getCell((short) 2).getCellType() == 0) {
					nl = new Double(hssfrow.getCell((short) 2).getNumericCellValue()).toString();
				} else {// 如果EXCEL表格中的数据类型为字符串型
					nl = hssfrow.getCell((short) 2).getStringCellValue().trim();
				}
				if (hssfrow.getCell((short) 3) == null) {
					gw = "";
				} else if (hssfrow.getCell((short) 3).getCellType() == 0) {
					gw = new Double(hssfrow.getCell((short) 3).getNumericCellValue()).toString();
				} else {// 如果EXCEL表格中的数据类型为字符串型
					gw = hssfrow.getCell((short) 3).getStringCellValue().trim();
				}
				if (hssfrow.getCell((short) 4) == null) {
					gwjnzsjbh = "";
				} else if (hssfrow.getCell((short) 4).getCellType() == 0) {
					gwjnzsjbh = new Double(hssfrow.getCell((short) 4).getNumericCellValue()).toString();
				} else {// 如果EXCEL表格中的数据类型为字符串型
					gwjnzsjbh = hssfrow.getCell((short) 4).getStringCellValue().trim();
				}
				if (hssfrow.getCell((short) 5) == null) {
					fzjg = "";
				} else if (hssfrow.getCell((short) 5).getCellType() == 0) {
					fzjg = new Double(hssfrow.getCell((short) 5).getNumericCellValue()).toString();
				} else {// 如果EXCEL表格中的数据类型为字符串型
					fzjg = hssfrow.getCell((short) 5).getStringCellValue().trim();
				}					
				if(StringUtils.isEmpty(xm)){
					break;
				}else{
					YwRqQyjyxkRypbqk ywRqQyjyxkRypbqk = new YwRqQyjyxkRypbqk();
					ywRqQyjyxkRypbqk.setQyid(qyid);
					ywRqQyjyxkRypbqk.setAcceptNo(acceptNo);
					ywRqQyjyxkRypbqk.setUserName(username);
					ywRqQyjyxkRypbqk.setUploadDate(new Date());
					ywRqQyjyxkRypbqk.setXm(xm);
					ywRqQyjyxkRypbqk.setNl(nl);
					ywRqQyjyxkRypbqk.setGw(gw);
					ywRqQyjyxkRypbqk.setGwjnzsjbh(gwjnzsjbh);
					ywRqQyjyxkRypbqk.setFzjg(fzjg);
					ywRqQyjyxkRypbqk.setDateFlag(dateFlag);
					this.save(ywRqQyjyxkRypbqk);
				}					
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
     * 导出 人员配备情况
     * @param hssfsheet
     * @param acceptNo
     * @param qyid
     * @return
     */
    public HSSFSheet expRypbqk(HSSFSheet hssfsheet,Object obj,
            String acceptNo, Long qyid, String username,HSSFCellStyle cs,String exptype){
    	if("qyxx".equals(exptype)){
    		YwRqQyjyxkFinalPzrqgyzdjb zdjb=(YwRqQyjyxkFinalPzrqgyzdjb) obj;
    		 List<YwRqQyjyxkFinalRypbqk> entityList = this.rypbqkService.getEntitysByQyid(zdjb.getId());
    	        if(entityList == null || entityList.size() <= 0) return null;
    	        if(entityList!=null)
    	        {
    	        try {
    	            /**
    	             * i代表生成的列表行，
    	             */
    	            for(int i = 10, j = 0; j< entityList.size(); i++){
    	               // if(i < 11) continue;
    	                
    	            	YwRqQyjyxkFinalRypbqk entity = entityList.get(j);
    	                if(entity != null){
    	                    HSSFRow row = hssfsheet.createRow(i);// 创建一个行对象
    	                    HSSFCell cell0 = row.createCell(1);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text0 = new HSSFRichTextString(entity.getXm()==null?"":entity.getXm());// 声明文本内容
    	                    cell0.setCellValue(text0);// 将文本对象加入单元格
    	                    cell0.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell1 = row.createCell(2);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text1 = new HSSFRichTextString(entity.getNl()==null?"":entity.getNl());// 声明文本内容
    	                    cell1.setCellValue(text1);// 将文本对象加入单元格.
    	                    cell1.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell2 = row.createCell(3);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text2 = new HSSFRichTextString(entity.getGw()==null?"":entity.getGw());// 声明文本内容
    	                    cell2.setCellValue(text2);// 将文本对象加入单元格
    	                    cell2.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell3 = row.createCell(4);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text3 = new HSSFRichTextString(entity.getGwjnzsjbh()==null?"":entity.getGwjnzsjbh());// 声明文本内容
    	                    cell3.setCellValue(text3);// 将文本对象加入单元格
    	                    cell3.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell4 = row.createCell(5);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text4 = new HSSFRichTextString(entity.getFzjg()==null?"":entity.getFzjg());// 声明文本内容
    	                    cell4.setCellValue(text4);// 将文本对象加入单元格
    	                    cell4.setCellStyle(cs); 
    	                }
    	                j++;
    	            }
    	        } catch (Exception e) {
    	            e.printStackTrace();
    	        }
    	        }
    	}else{
    	    YwRqQyjyxkPzrqgyzdjb zdjb=(YwRqQyjyxkPzrqgyzdjb) obj;
    		 List<YwRqQyjyxkRypbqk> entityList = this.getListByQyId(zdjb.getId());
    	        if(entityList == null || entityList.size() <= 0) return null;
    	        if(entityList!=null)
    	        {
    	        try {
    	            /**
    	             * i代表生成的列表行，
    	             */
    	            for(int i = 10, j = 0; j< entityList.size(); i++){
    	               // if(i < 11) continue;
    	                
    	                YwRqQyjyxkRypbqk entity = entityList.get(j);
    	                if(entity != null){
    	                    HSSFRow row = hssfsheet.createRow(i);// 创建一个行对象
    	                    HSSFCell cell0 = row.createCell(1);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text0 = new HSSFRichTextString(entity.getXm()==null?"":entity.getXm());// 声明文本内容
    	                    cell0.setCellValue(text0);// 将文本对象加入单元格
    	                    cell0.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell1 = row.createCell(2);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text1 = new HSSFRichTextString(entity.getNl()==null?"":entity.getNl());// 声明文本内容
    	                    cell1.setCellValue(text1);// 将文本对象加入单元格.
    	                    cell1.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell2 = row.createCell(3);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text2 = new HSSFRichTextString(entity.getGw()==null?"":entity.getGw());// 声明文本内容
    	                    cell2.setCellValue(text2);// 将文本对象加入单元格
    	                    cell2.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell3 = row.createCell(4);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text3 = new HSSFRichTextString(entity.getGwjnzsjbh()==null?"":entity.getGwjnzsjbh());// 声明文本内容
    	                    cell3.setCellValue(text3);// 将文本对象加入单元格
    	                    cell3.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell4 = row.createCell(5);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text4 = new HSSFRichTextString(entity.getFzjg()==null?"":entity.getFzjg());// 声明文本内容
    	                    cell4.setCellValue(text4);// 将文本对象加入单元格
    	                    cell4.setCellStyle(cs); 
    	                }
    	                j++;
    	            }
    	        } catch (Exception e) {
    	            e.printStackTrace();
    	        }
    	        }
    	}
       
        return hssfsheet;
    }
    
    private List<YwRqQyjyxkRypbqk> getListByQyId(Long qyid){
        String hql = "from YwRqQyjyxkRypbqk t where t.gyzid='" + qyid + "'";
        List<YwRqQyjyxkRypbqk> entityList = ywRqQyjyxkRypbqkDao.find(hql);
        return entityList;
    }

    
    public void importFinalQyData(String acceptNo, Long qyid) {
        List<YwRqQyjyxkRypbqk> list=this.getDatas(acceptNo, qyid);
        for(YwRqQyjyxkRypbqk entity:list){
            YwRqQyjyxkFinalRypbqk finalentity = new DozerBeanMapper().map(entity, YwRqQyjyxkFinalRypbqk.class);
            finalentity.setId(null);
            this.rypbqkService.save(finalentity);
        }
    }
    
    /**
     * 
     * @return
     */
    private List<YwRqQyjyxkRypbqk> getDatas(String acceptNo, Long qyid){
        String hql = "from YwRqQyjyxkRypbqk t where t.qyid='" + qyid + "' and t.acceptNo='"+acceptNo+"'";
        return this.ywRqQyjyxkRypbqkDao.find(hql);
    }

    /*
     * (non-Javadoc)
     * @see com.augurit.gzcgwsp.excelimportexport.service.IYwRqQyjyxkRypbqkService#findPersonData(java.lang.String, java.lang.String, java.lang.Long)
     */
	public List<Long> findPersonData(String name, String zsbh, Long qyid) {
		String sql="select qyid from YwRqQyjyxkRypbqk where qyid<>"+qyid+" " +
				"and xm='"+name+"' and gwjnzsjbh='"+zsbh+"'" ;
		return this.ywRqQyjyxkRypbqkDao.find(sql);
	}
}
